/**
 * 以下是Java中引用类型和原始类型的缺省值的表格整理：

| 类型类别 | 类型名称 | 缺省值示例 | 描述 |
|----------|----------|-------------|------|
| 引用类型 | 类实例   | `MyClass obj;` | `null` |
|          | 数组     | `int[] arr;` | `null` |
|          | 接口     | `MyInterface iface;` | `null` |
|          | 包装类   | `Integer num;` | `null` |
|          | 字符串   | `String str;` | `null` |
| 原始类型 | `int`    | `int num;` | `0` |
|          | `double` | `double d;` | `0.0` |
|          | `float`  | `float f;` | `0.0f` |
|          | `long`   | `long l;` | `0L` |
|          | `short`  | `short s;` | `0` |
|          | `byte`   | `byte b;` | `0` |
|          | `char`   | `char c;` | `\u0000` |
|          | `boolean`| `boolean flag;` | `false` |

说明：
- 引用类型包括类实例、数组、接口、包装类和字符串。所有这些引用类型在声明后未初始化时的缺省值都是`null`。
- 原始类型包括`int`、`double`、`float`、`long`、`short`、`byte`、`char`和`boolean`。每种原始类型都有其特定的缺省值。
- 从Java 8开始，局部变量必须在使用前被初始化，否则会导致编译错误。这意味着局部变量不再有缺省值的概念。
- 成员变量（字段）在声明时可以不初始化，它们的缺省值遵循上述规则。

*/
public class CheckBeforeUse {
    public static void main(String[] args) {
        // 数组在创建出来之后，会按照类型给数组中的每个元素赋缺省值。
        // 引用类型的缺省值是null
        Merchandise[] merchandises = new Merchandise[9];
        // 给索引为偶数的引用赋值
        for (int i = 0; i < merchandises.length; i++) {
            if (i % 2 == 0) {
                merchandises[i] = new Merchandise();
            }
        }

        // merchandises[7].name = "不存在的商品，不存在的名字";

        for (int i = 0; i < merchandises.length; i++) {
            if (merchandises[i] != null) {
                merchandises[i].name = "商品" + i;
            }
        }

        for (int i = 0; i < merchandises.length; i++) {
            if (merchandises[i] != null) {
                System.out.println(merchandises[i].name);
            }
        }
    }
}
